Computing devices such as computers, tablet computers, and smart phones may include one or more processors that each may further include one more computing cores. To reduce processing time and fully utilize the computing power of the processors, an operating system for the computing device may concurrently execute multiple applications and multiple threads of instructions within each applications. These applications and threads may be collectively referred to as tasks for the one or more processors herein.
When tasks run concurrently, they may attempt to concurrently access data stored in a memory device. Concurrent accesses of a same memory by different tasks may create unwanted race situations. For example, after task A reads from an address pointing to a section of the memory, task B may read the same section and update the section by writing to the address pointing to the section. If, subsequent to the write by task B, task A comes back and writes to the same section, task A may run the risk of unintentionally overwriting the results of task B—which is often undesirable and unsafe.